#include "config.h"
#include "led.h"
#include "serial.h"
#include "file.h"
#include "uwifi.h"

void loop_time(loop_time_t *looptime);

loop_time_t arrayTime[10] = {
    {0, 1000, led_toggle}, // LED任务，隔1000ms执行一次LED亮灭交变
    {0, 20, loop_serial},  // AT任务，隔20ms执行一次AT指令
    {0, 250, loop_wifi},  // WIFI任务，隔1000ms执行一次wifi循环刷新
};

void setup(void)
{
  // 功能设置
  setup_led();
  setup_serial();
  setup_wifi();
  setup_file();
}

void loop(void)
{
  // 三个任务轮询
  loop_time(&arrayTime[0]);
  loop_time(&arrayTime[1]);
  loop_time(&arrayTime[2]);
}

void loop_time(loop_time_t *looptime)
{
  unsigned long currentTick;
  currentTick = millis(); // 读取当前时间
  if (currentTick >= looptime->lastTick)
  {
    if ((currentTick - looptime->lastTick) >= looptime->intervalTick)
    {
      looptime->lastTick = currentTick;
      looptime->func(); // 达到预定时间执行函数
    }
  }
  else
  { // 超过计时上限
    if ((millisTimeMax - looptime->lastTick + currentTick) >= looptime->intervalTick)
    {
      looptime->lastTick = currentTick;
      looptime->func(); // 达到预定时间执行函数
    }
  }
}
